package com.edu.handler;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Date;

/**
 * @Author:何包蛋
 * @Date :2022/11/2 - 11 - 02 - 15:54
 */

/*
* 调度处理器（用于增强被代理类）
* */
public class LogHandler implements InvocationHandler {

    private Object target;//被nnnnnnnnnnnnnnnnnnnnnn代理对象

    public LogHandler(Object target) {//将被代理类作为参数传入
        this.target = target;
    }
    //代理对象 所有的方法的执行 都是通过 下面的 invoke方法
    //  proxy 相当于 代理对象
    //  method 相当于 原本要被执行的方法
    //  args  是指方法执行传递的参数
    //  不要在 invoke里 轻易的去 调用 proxy的方法，会出现死循环
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        /*System.out.println("日志：执行了"+method.getName()+"方法前"+new Date());//具体增强的内容（可写在执行被代理对象前后）
        Object o = method.invoke(target, args);//真正执行 被代理对象原本的方法
        System.out.println("日志：执行了"+method.getName()+"方法后"+new Date());
        return o;*/

        if(method.getName().equals("getBook")){
            Object o = method.invoke(target, args);
            return o;
        }else{
            System.out.println("日志：执行了"+method.getName()+"方法前"+new Date());
            Object o = method.invoke(target, args);
            return o;
        }
    }
}
